/*
 * ClientMessage.h
 *
 */

#ifndef CLIENTMESSAGE_H_
#define CLIENTMESSAGE_H_

#include "../common/Thread.h"
#include "../common/TimeUtils.h"
#include "../common/Socket.h"
#include "../common/ServerConfig.h"
#include "../common/LogFile.h"
#include "http/HttpProtocol.h"
#include "http/HttpHost.h"

class ClientMessage : public Thread {
	private:
		TimeUtils creationTime;
		Socket* socket;
		HttpHost host;
		bool done;
		const std::string id;
		LogFile& logFile;

		/**
		 * Intenta enviar un código de error y loguea la opearación.
		 */
		void sendErrorRespone(HttpProtocol& protocol, int code);
	public:
		ClientMessage(Socket* socket, const ServerConfig& config, LogFile& log,
				const std::string& id);
		virtual ~ClientMessage();

		/**
		 * Devuelve el identificador de cliente.
		 */
		const std::string& getId() const;

		/**
		 * Devuelve la cantidad de segundos que pasarón desde que la clase
		 * fue instanciada.
		 */
		int getElapsedTime() const;

		/**
		 * Permite verificar si el método ejecutado por el thread finalizó.
		 */
		bool finished() const;

		/**
		 * Permite abortar la secuencia del método run.
		 */
		void die();
	protected:
		/**
		 * Método a ser ejecutado por el hilo de la clase.
		 */
		void run();
};

#endif /* CLIENTMESSAGE_H_ */
